home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / serveur.h < prev    next >
C/C++ Source or Header  |  1996-06-05  |  12KB  |  413 lines

  1. /*
  2.  * Serveur.h
  3.  *
  4.  * Constantes et structures n‚cessaires … la gestion du serveur
  5.  *
  6.  * Notes:
  7.  * ------
  8.  * Diagrame des dépendances:
  9.  *
  10.  * gemwdef.h   arbotree.h  dfstruct.h    dxf.h
  11.  *     |           |           |           |
  12.  *  WIPARAMS    PAGEARBO       DATADIR   COMPACT_RECORD   VOIESTATE
  13.  *     |     ARBO_FIELDPARS DATAPAGE   |      |            |              gem_dirs.c
  14.  *      \             |             TEXTLINE   |      |            /              |
  15.  *        \            \         TEXTINFO  /  COMPREC_LISTELT  /    ACTION  DIRENTRY
  16.  *          \_________\_______ | ____/_______/___________/_______/_______/
  17.  *                            \|/
  18.  *                            VOIE
  19.  *
  20.  */
  21.  
  22. /*
  23.  * V‚rifie si les pr‚sentes d‚finitions ont d‚ja ‚t‚ faites:
  24.  */
  25. #ifndef SERVEUR_H
  26. #define SERVEUR_H
  27.  
  28. /*
  29.  * Headers n‚cessaires
  30.  */
  31.     #include "ARBOTREE.H"
  32.     #include "DFSTRUCT.H"
  33.     #include "WIN_PU.H"
  34.     #include "OS_DIRS.H"
  35.     #include "USLTP.H"
  36.     
  37. /* 
  38.  * Codes touches press‚es / evenements exterieurs survenus:
  39.  */
  40. typedef 
  41.     enum
  42.     {
  43.         KEY_NONE,                /* Aucune touche n'a ‚t‚ press‚e */ 
  44.         KEY_SOMM,            /* Sommaire */
  45.         KEY_GUIDE,           /* Guide */
  46.         KEY_ANNUL,           /* Annulation */
  47.         KEY_CORREC,          /* Correction */
  48.         KEY_RETOUR,          /* Retour */
  49.         KEY_SUITE,           /* Suite */
  50.         KEY_REPET,           /* R‚p‚tition */
  51.         KEY_ENVOI,           /* Envoi */
  52.         KEY_FIN,             /* (Connexion/)Fin */
  53.         KEY_CR,                    /* Carriage Return */
  54.         ACTIONS,
  55.         EVT_APPEL,                /* D‚tection d'un appel */
  56.         ACT_DISCONNECT,        /* Connexion vient d'ˆtre interrompue */
  57.         ACT_CONNECT,            /* Connexion vient d'ˆtre ‚tablie */
  58.         ECHEC_CONNECT,            /* La Connexion qu'on tentait d'‚tablir vient d'‚chouer */
  59.     }
  60.     KEYCODE;
  61.  
  62. /* 
  63.  * Taches possibles a effectuer par une voie:
  64.  */
  65. enum {
  66.     INIT,                /* La voie doit ˆtre initialis‚e */
  67.     HALT,                /* Il y a une Kernel-Panic: le serv est stopp‚ */
  68.     SLEEP,            /* La voie n'est pas active */
  69.     CNCT,                /* Etablissement Connexion en cours */
  70.     DECO,                /* D‚connexion en cours */
  71.     WAIT,                /* On est en attente d'action utilisateur */
  72.     START,            /* D‚but d'une connexion */
  73.     JUMP,                /* On est en phase de changement de page */
  74.     ENPG,                /* On est en ENTER PAGE: effectue initialisations */    
  75.     DISP,                /* On est en phase d'affichage … l'‚cran */
  76.     OPDB,                /* Phase de recherche/ouverture base de donn‚es */
  77.     OTXT,                /* Phase de recherche/ouverture texte */
  78.     DDAT,                /* Phase d'affichage de donn‚es */
  79.     DREC,                /* Phase d'affichage d'un nouveau message */
  80.     DPAG,                /* Phase d'affichage d'une page de message */
  81.     DWLD,                /* Download, Protocole USLTP en cours */
  82.     EFLD,                /* On entre ds un champ */
  83.     CPOS,                /* Repositionnement curseur pour continuer ‚dition */
  84.     CLRF                /* Clear Field (pour nouvelle ‚dition) */
  85. };
  86.         
  87.  
  88. /*
  89.  * Tranche de temps pour traitement d'une voie:
  90.  */
  91. #define     TIMESLICE     (CLK_TCK *100 /100);        /* 100 100Šmes de Seconde */
  92.                                              
  93.                                              
  94. /*
  95.  * Dur‚e de timeout pour les acquitements:
  96.  */
  97. #define    ACQ_TIMEOUT    (CLK_TCK *7);                /* 7 Secondes */
  98.                                              
  99.                                              
  100. /* 
  101.  * Dur‚e de timeout connexion:
  102.  *
  103.  * Notes:
  104.  * ------
  105.  * Attention, il y a un Timeout "hard" dans le Minitel:
  106.  * 40 secondes sur un Minitel 1B
  107.  * 90 secondes sur un Minitel 2
  108.  * Si ce timeout "hard" est d‚pass‚ on recevra un "Echec connexion"
  109.  * Si on force une d‚co avant timeout hard sur M2, 
  110.  * on se retrouve en mode prise de ligne!
  111.  */
  112. #define    CNCT_TIMEOUT    (CLK_TCK *15);                /* 15 Secondes */
  113.  
  114. /*
  115.  * Edition:
  116.  */
  117.     #define    PARAGRAPH_CONT        '-'
  118.     #define    PARAGRAPH_STOP        'Ý'
  119.     
  120.  
  121. /* 
  122.  * Codes pour action progress:
  123.  *
  124.  * Purpose:
  125.  * --------
  126.  * utilisés dans les procedures du type connexion ou on attend
  127.  * des acquitements
  128.  */ 
  129. typedef
  130.     enum
  131.     {
  132.         APG_NONE,                /* Pas d'action en cours */
  133.     /* Connexion: */
  134.         APG_CNXSTART,            /* Debut d'un proc‚dure de connexion */
  135.         APG_SPEED,                /* Vitesse modem OK */            
  136.         APG_PORTEUSE,            /* Porteuse envoy‚e */
  137.     /* D‚connexion: */
  138.         APG_PHASE_DECO            /* On entre en phase de d‚connexion */
  139.     }
  140.     ACTPGRS;
  141.            
  142.            
  143.     
  144. typedef
  145.     enum
  146.     {
  147.         FLD_NOT_FOUND, 
  148.         FLD_DISABLED,
  149.         FLD_READY
  150.     }
  151.     FLD_STATUS;
  152.  
  153.     
  154. /*
  155.  * IOFIELD: Champ de saisie d'une voie 
  156.  *
  157.  * 21.08.94: fplanque: Created
  158.  * 05.12.94: introduction du double chainage pour traitement SUITE/RETOUR
  159.  * 18.12.94: changed from INfield to IOfield
  160.  */
  161. typedef
  162.     struct    infield
  163.     {
  164.         struct infield    *    p_next;                /* Ptr sur champ suivant */
  165.         struct infield    *    p_prev;                /* Ptr sur champ pr‚c‚dent */
  166.         union
  167.         {
  168.             OUTPUT_FPAR    *        Output;                /* Champ de sortie */
  169.             INPUT_FPAR    *        Input;                /* Champ de saisie */
  170.         }                        FPar;
  171.         TEXTINFO            *    pTextInfo;            /* Buffers de saisie du texte tap‚ */
  172.         TEXTLINE            *    pTextLine_Top;        /* Ligne en haut de la zone d'affichage du champ */
  173.         long                    l_TopLine;            /* No de la TopLine; au d‚but: 1 (et pas0!) */
  174.     }
  175.     IOFIELD;
  176.  
  177.     
  178. /*
  179.  * VOIESTATE: Etats d'une voie
  180.  */
  181. typedef
  182.     struct
  183.     {
  184.         int        log_modemcnx    :    1;        /* Modem connect‚ logiquement */
  185.         int        phys_modemcnx    :    1;        /* Modem connect‚ physiquement */
  186.         UINT        n_speed            :    4;        /* Code vitesse; 0: local; 1: connect‚; 15: inconnue */
  187.     }
  188.     VOIESTATE;   
  189.  
  190.  
  191. /*
  192.  * ACTION: Id d'une action a effectuer dans la liste d'attente avec
  193.  *         ses paramŠtres:
  194.  */
  195. typedef
  196.     struct
  197.     {
  198.         int        no;            /* no de l'action */
  199.         int        int1;            /* paramŠtres INT */
  200.         int        int2;
  201.         ULONG        ulong1;        /* ParamŠtres UNSIGNED LONG */
  202.         void *    ptr1;            /* ParamŠtres pointeurs */
  203.     }
  204.     ACTION;
  205.  
  206.  
  207. /*
  208.  * Sert … maintenir une liste des records sur lesquels on a un ReadLock
  209.  */
  210. typedef
  211.     struct    CompRec_ListElt
  212.     {
  213.         struct CompRec_ListElt *     pCRListElt_next;
  214.         COMPACT_RECORD              *    pCompRec;
  215.     }
  216.     COMPREC_LISTELT;
  217.  
  218.  
  219.     
  220. /*
  221.  * VOIE: Toutes les informations utiles à une VOIE du serveur
  222.  * 
  223.  * 13.11.94: ajout fnct champ d‚dition et infos cnt
  224.  * 05.12.94: suppressed infield_index
  225.  * 05.01.94: ACTION prend params / dispartion des champs 'next'
  226.  */
  227. #define    NB_ACTS_MAX    20                /* Nbre maximum d'entrees dans la */
  228.                                             /* liste des taches a effectuer par */
  229.                                             /* cette voie */
  230. typedef
  231.     struct        voie
  232.     {
  233.         /*
  234.          * -------------------
  235.          * Attributs g‚n‚raux:
  236.          * -------------------
  237.          */
  238.         struct voie    *    next;            /* Ptr sur voie suivante */
  239.         int                no_voie;        /* Num‚ro de la voie */
  240.         int                device;        /* No du driver de P‚riph‚rique de communication (No type= AUX) */
  241.         int                mode;            /* Mode de fonctionnement */
  242.         WIPARAMS        *    wi_params;    /* Params fenˆtre associ‚e */
  243.  
  244.         /*
  245.          * --------
  246.          * Service:
  247.          * --------
  248.          */
  249.         VOIESTATE    state;                    /* Etats de la voie */
  250.  
  251.         DATADIR    *    arbodir;                    /* Dossier arbo dans lequel on se situe */
  252.         DATAPAGE    *    arbopage;                /* Page arbo sur laquelle on se situe */
  253.         PAGEARBO    *    arboparams;                /* ParamŠtres de cette page */
  254.  
  255.         int            action_head;            /* No Action en cours */
  256.         int            action_tail;            /* No de la derniŠre action */
  257.         ACTION        action[NB_ACTS_MAX];    /* Liste des actions … effectuer */
  258.         
  259.         /*
  260.          * ----------------------
  261.          * Affichage pages ‚cran: 
  262.          * ----------------------
  263.          */
  264.         DATADIR            *    pecrandir;        /* Dossier dans lequel on doit chercher les pages ‚cran */
  265.  
  266.         /*
  267.          * --------
  268.          * Donn‚es: 
  269.          * --------
  270.          * Il faudra bientot plusieurs pointeurs sur 'database' qd il y a plusieurs bases ouvertes simultan‚ment
  271.          */
  272.         DATADIR            *    pDataDir_Datas;        /* Dossier dans lequel on doit chercher les bases de donn‚es */
  273.         DATAPAGE            *    database;                /* Base de donn‚es concern‚e */
  274.  
  275.         COMPACT_RECORD    *    curr_comprec;            /* Enregistrement compact en cours de consultation */
  276.         COMPACT_RECORD ** pTCompRec_ptrs;        /* Tableau de pointeurs vers tous les Compact-Records ref‚renc‚s sur la page courante */
  277.  
  278.         COMPREC_LISTELT*    pCRLstElt_1stRLock;    /* Liste des readlocks */
  279.         COMPACT_RECORD    *    pCompRec_XLock;        /* Enregistrement sur lequel on d‚tient un lock EXCLUSIF! */
  280.  
  281.         int                    nb_MaxDisplayedRecs;    /* Nb max de records pouvant etre affich‚s sur une page == nbre d'entr‚es dans pTCompRec_ptrs */
  282.         int                    nb_DisplayedRecs;        /* Nombre de records affich‚s sur page courante */
  283.         int                    n_RecIndex_Top;        /* Index de record en haut de la liste (si ya plusieurs recs sur un ‚cran) */
  284.         int                    n_RecIndex_Curr;        /* Index de record courant */
  285.  
  286.         int                    n_PageNumber_Curr;    /* No de la page courante */
  287.  
  288.         /*
  289.          * Donn‚es ...Directory courant charg‚ en m‚moire:
  290.          */
  291.         DIRENTRY         **    TpDirEnt;                /* Tableau de ptrs sur entr‚es de Dir ou NULL */
  292.         int                    nb_TableEnt;            /* Nbre d'entr‚es ds tableau */
  293.         int                    nb_DirEnt;                /* Nbre d'entr‚es utilis‚es ds dir courant */
  294.         char                *    pMsz_Path;                /* Chemin d'accŠs courant (Initialis‚ uniquement en fin de cnx) */
  295.         
  296.  
  297.         /*
  298.          * -------
  299.          * Textes: 
  300.          * -------
  301.          */
  302.         DATADIR            *    pDataDir_Texts;        /* Dossier dans lequel on doit chercher les textes */
  303.         DATAPAGE            *    pDataPage_OpenText;    /* texte actuellement ouvert */
  304.  
  305.  
  306.         /*
  307.          * ----------------------
  308.          * Affichage des donn‚es:
  309.          * ----------------------
  310.          */
  311.         OUTPUT_FPAR        *    pOutputFPar_CurrOut;    /* Ptr sur params d'affichage champ courany (scrollable) */
  312.         IOFIELD            *    pIOField_CurrOut;        /* Ptr sur champ de sortie (scrollable) courant */                    
  313.  
  314.  
  315.         /*
  316.          * -------
  317.          * Saisie: 
  318.          * -------
  319.          */
  320.         IOFIELD        *    pIOField_ListIn;    /* Liste des champs de saisie */
  321.         IOFIELD        *    pIOField_CurrIn;    /* Ptr sur Champ d'‚dition courant */    
  322.  
  323.         int                csr_x, csr_y;        /* Coordonn‚es du curseur */
  324.         int                curr_tcolor;        /* Couleur texte actuellement utilis‚e */
  325.         TEXTLINE        *    curr_textline;        /* Ligne en cours d'‚dition */
  326.         long                l_CurrLine;            /* No de ligne en cours */
  327.  
  328.         /*
  329.          * Nombre d'enregistrements cr‚‚s cons‚cutivement sur cette page 
  330.          * En g‚n‚ral, on posera une limite … un enregistrement/passage
  331.          * sur la meme page arbo 
  332.          */
  333.         int            nb_records;            
  334.  
  335.  
  336.         /*
  337.          * ----------------
  338.          * Entr‚es clavier: 
  339.          * ----------------
  340.          * Lorsque l'on re‡oit une s‚quence de caractŠres depuis le Minitel, 
  341.          * entete_seq prend la valeur du premier octet afin de le m‚moriser 
  342.          * jusqu'… r‚ception du suivant. En temps normal cette var vaut NIL 
  343.          */
  344.         int            entete_seq;                
  345.         /*
  346.          * Compteur du nombre de codes qu'il reste … recevoir  
  347.          * lors d'une s‚qeunce PRO 1, 2 ou 3   (En temps normal: 0) 
  348.          */
  349.         int            pro_compte;                
  350.         /*
  351.          * Code s‚quence CSI (En temps normal=NIL) 
  352.          */
  353.         int            csi;                        
  354.         /*
  355.          * Code s‚quence de composition (En temps normal=NIL) 
  356.          */
  357.         int            compose;                    
  358.         /*
  359.          * ACTPGRS : Progession de l'action en cours 
  360.          * (reception d'acquitements etc...) lors de la cnx, dcnx, etc...
  361.          */
  362.         int            action_progress;        
  363.  
  364.         clock_t        acq_timeout;            /* "Heure" de timeout acquitements */
  365.         clock_t        key_timeout;            /* "Heure" de timeout action courante */
  366.  
  367.  
  368.         /*
  369.          * ------
  370.          * USLTP:
  371.          * ------
  372.          */
  373.         USLTP_CTRLBLK * pUCtl;
  374.  
  375.         /*
  376.          * -----------------------------
  377.          * Informations sur le connect‚:
  378.          * -----------------------------
  379.          */
  380.         char *    pMsz_Login;            /* Pseudo */
  381.         char *    pMsz_FirstName;    /* Pr‚nom */
  382.         char *    pMsz_LastName;        /* Nom */
  383.         /*
  384.          * ------------
  385.          * 'Variables':
  386.          * ------------
  387.          */
  388.         char    *    pMsz_VFile;        /* Fichier selectionne */
  389.  
  390.  
  391.         /*
  392.          * ---------------------------------------
  393.          * ParamŠtres transmis … la page suivante:
  394.          * ---------------------------------------
  395.          */
  396.         DATAPAGE            *    pDataPage_LockedDB_OUT;        /* Database contenant le COMPREC lock‚ … transmettre */
  397.         COMPACT_RECORD    *    pCompRec_Locked_OUT;    
  398.         /*
  399.          * -------------------------------------------
  400.          * ParamŠtres r‚cup‚r‚s de la page pr‚c‚dente:
  401.          * -------------------------------------------
  402.          */
  403.         DATAPAGE            *    pDataPage_LockedDB_IN;        /* Database contenant le COMPREC lock‚ … transmettre */
  404.         COMPACT_RECORD    *    pCompRec_Locked_IN;    
  405.     }
  406.     VOIE;
  407.     
  408.  
  409. /*
  410.  * Fin du test anti red‚finition:
  411.  */
  412. #endif
  413.